Variables, Switches And Scripts Items
Автор: HopeBree
Версия: 1.3
Тип: Предметы
Описание:
Скрипт позволяет изменить переменную или переключатель после использования предмета, и вызов скрипта, не используя общие события.
Использование:
Добавить в нотетаг следующие: <variable A: B C> или <switch D: E>
A - ID переменной
B - операция над переменной, может принимать следующие значение:
- set - Выполняет присваивание значения начальной переменной (без дополнительных вычислений);
- add - Выполняет сложение значения с начальной переменной и возвращает результат;
- sub - Выполняет вычитание значения от начальной переменной и возвращает результат;
- mul - Выполняет умножение значения на начальную переменную и возвращает результат;
- div - Выполняет деление начальной переменной на значение и возвращает результат;
- mod - Выполняет деление начальной переменной на значение и возвращает остаток.
C - значение
D - ID переключателя
E - true или false, включить или выключить переключатель
F - скрипт
	Код:
	<variable 10: set 100>
<switch 10: true>
<script>
  SceneManager.call_ext(Scene_HistBook, :ancient_book)
</script>
 Скрипт:
	PHP код:
	
#==============================================================================#
#  Variables, Switches And Scripts Items                                       #
#------------------------------------------------------------------------------#
#  Автор: HopeBree                                                             #
#  Для: RPGMAKER VX ACE                                                        #
#  Версия 1.4                                                                  #
#------------------------------------------------------------------------------#
#  13.05.2017 - Версия 1.4 - Небольшие исправления                             #
#  04.01.2016 - Версия 1.3 - Добавлены скрипты                                 #
#  16.11.2015 - Версия 1.2 - Добавлены переключатели                           #
#  26.10.2015 - Версия 1.1 - Можно использовать не только числа в значении "C" #
#  25.10.2015 - Версия 1.0 - Релиз                                             #
#==============================================================================#
# Скрипт позволяет изменить переменную или переключатель после использования   #
# предмета, и вызов скрипта, не используя общие события.                       #
#------------------------------------------------------------------------------#
# Добавить в нотетаг следующие: <variable A: B C> или <switch D: E>            #
#   A - ID переменной                                                          #
#   B - операция над переменной, может принимать следующие значение:           #
#      ● set - Выполняет присваивание значения начальной переменной (без       #
#              дополнительных вычислений);                                     #
#      ● add - Выполняет сложение значения с начальной переменной и            #
#              возвращает результат;                                           #
#      ● sub - Выполняет вычитание значения от начальной переменной и          #
#              возвращает результат;                                           #
#      ● mul - Выполняет умножение значения на начальную переменную и          #
#              возвращает результат;                                           #
#      ● div - Выполняет деление начальной переменной на значение и            #
#              возвращает результат;                                           #
#      ● mod - Выполняет деление начальной переменной на значение и            #
#              возвращает остаток.                                             #
#   C - значение                                                               #
#   D - ID переключателя                                                       #
#   E - true или false, включить или выключить переключатель                   #
# Для вызова скрипта использовать <script>F</script>                           #
#   F - скрипт                                                                 #
#------------------------------------------------------------------------------#
# Например:                                                                    #
#   <variable 10: set 100>                                                     #
#   <switch 10: true>                                                          #
#   <script>                                                                   #
#     SceneManager.call_ext(Scene_HistBook, :ancient_book)                     #
#   </script>                                                                  #
#==============================================================================#
module HB
  module VARIABLES_AND_SWITCHES_USE_ITEM
    V_REGEX = /<variable (\d+): (set|add|sub|mul|div|mod) (.*?)>/
    S_REGEX = /<switch (\d+): (true|false)>/
    C_REGEX = /<script>(.*?)<\/script>/im
  end
end
module RPG
  class Item
    def variables_items
      load_notetag_variables_items if @variables_items.nil?
      return @variables_items
    end
    
    def switches_items
      load_notetag_switches_items if @switches_items.nil?
      return @switches_items
    end
    
    def scripts_items
      load_notetag_scripts_items if @scripts_items.nil?
      return @scripts_items
    end
    
    def load_notetag_variables_items
      @variables_items = []
      res = self.note.scan(HB::VARIABLES_AND_SWITCHES_USE_ITEM::V_REGEX)
      res.each do |data|
        varItem = VariablesSwitches.new
        varItem.v_id = data[0].to_i
        varItem.v_op = data[1].to_s
        varItem.v_va = data[2]
        @variables_items << varItem
      end
    end
    def load_notetag_switches_items
      @switches_items = []
      res = self.note.scan(HB::VARIABLES_AND_SWITCHES_USE_ITEM::S_REGEX)
      res.each do |data|
        swiItem = VariablesSwitches.new
        swiItem.s_id = data[0].to_i
        swiItem.s_va = data[1].to_s
        @switches_items << swiItem
      end
    end
    def load_notetag_scripts_items
      @scripts_items = []
      res = self.note.scan(HB::VARIABLES_AND_SWITCHES_USE_ITEM::C_REGEX)
      res.each do |data|
        scrItem = VariablesSwitches.new
        scrItem.c_va = data[0]
        @scripts_items << scrItem
      end
    end
  end  
end
class VariablesSwitches
  
  attr_accessor :v_id
  attr_accessor :v_op
  attr_accessor :v_va
  attr_accessor :s_id
  attr_accessor :s_va
  attr_accessor :c_va
  
  def initialize
    @v_id = 0
    @v_op = "set"
    @v_va = 0
    @s_id = 0
    @s_va = false
    @c_va = 0
  end
end
class Game_Battler < Game_BattlerBase
  
  alias :hb_variables_and_switches_use_item_consume_item :consume_item
  def use_item(item)
    hb_variables_and_switches_use_item_consume_item(item)
    item.variables_items.each do |varItem|
      case varItem.v_op
      when "set"
        $game_variables[varItem.v_id] = eval(varItem.v_va)
      when "add"
        $game_variables[varItem.v_id] += eval(varItem.v_va)
      when "sub"
        $game_variables[varItem.v_id] -= eval(varItem.v_va)
      when "mul"
        $game_variables[varItem.v_id] *= eval(varItem.v_va)
      when "div"
        $game_variables[varItem.v_id] /= eval(varItem.v_va)
      when "mod"
        $game_variables[varItem.v_id] %= eval(varItem.v_va)
      end
    end
    item.switches_items.each do |swiItem|
      $game_switches[swiItem.s_id] = swiItem.s_va
    end
    item.scripts_items.each do |scrItem|
      eval(scrItem.c_va)
    end
  end
end 
 
						
					
Социальные закладки